home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / C / Applications / Portable Patmos / usr / include / machine / param.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-08  |  9.6 KB  |  255 lines  |  [TEXT/R*ch]

  1. /*
  2.  * Copyright (c) 1988 University of Utah.
  3.  * Copyright (c) 1982, 1990 The Regents of the University of California.
  4.  * All rights reserved.
  5.  *
  6.  * This code is derived from software contributed to Berkeley by
  7.  * the Systems Programming Group of the University of Utah Computer
  8.  * Science Department.
  9.  *
  10.  * Redistribution and use in source and binary forms, with or without
  11.  * modification, are permitted provided that the following conditions
  12.  * are met:
  13.  * 1. Redistributions of source code must retain the above copyright
  14.  *    notice, this list of conditions and the following disclaimer.
  15.  * 2. Redistributions in binary form must reproduce the above copyright
  16.  *    notice, this list of conditions and the following disclaimer in the
  17.  *    documentation and/or other materials provided with the distribution.
  18.  * 3. All advertising materials mentioning features or use of this software
  19.  *    must display the following acknowledgement:
  20.  *    This product includes software developed by the University of
  21.  *    California, Berkeley and its contributors.
  22.  * 4. Neither the name of the University nor the names of its contributors
  23.  *    may be used to endorse or promote products derived from this software
  24.  *    without specific prior written permission.
  25.  *
  26.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  27.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  28.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  29.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  30.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  31.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  32.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  33.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  34.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  35.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  36.  * SUCH DAMAGE.
  37.  */
  38. /*-
  39.  * Copyright (C) 1993    Allen K. Briggs, Chris P. Caputo,
  40.  *            Michael L. Finch, Bradley A. Grantham, and
  41.  *            Lawrence A. Kesteloot
  42.  * All rights reserved.
  43.  *
  44.  * Redistribution and use in source and binary forms, with or without
  45.  * modification, are permitted provided that the following conditions
  46.  * are met:
  47.  * 1. Redistributions of source code must retain the above copyright
  48.  *    notice, this list of conditions and the following disclaimer.
  49.  * 2. Redistributions in binary form must reproduce the above copyright
  50.  *    notice, this list of conditions and the following disclaimer in the
  51.  *    documentation and/or other materials provided with the distribution.
  52.  * 3. All advertising materials mentioning features or use of this software
  53.  *    must display the following acknowledgement:
  54.  *    This product includes software developed by the Alice Group.
  55.  * 4. The names of the Alice Group or any of its members may not be used
  56.  *    to endorse or promote products derived from this software without
  57.  *    specific prior written permission.
  58.  *
  59.  * THIS SOFTWARE IS PROVIDED BY THE ALICE GROUP ``AS IS'' AND ANY EXPRESS OR
  60.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  61.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  62.  * IN NO EVENT SHALL THE ALICE GROUP BE LIABLE FOR ANY DIRECT, INDIRECT,
  63.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  64.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  65.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  66.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  67.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  68.  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  69.  *
  70.  */
  71. /*
  72.  * from: Utah $Hdr: machparam.h 1.11 89/08/14$
  73.  *
  74.  *    from: @(#)param.h    7.8 (Berkeley) 6/28/91
  75.  *    $Id: param.h,v 1.6 1993/12/06 04:11:47 briggs Exp $
  76.  */
  77.  
  78. #ifndef PSL_IPL
  79. #include "machine/psl.h"
  80. #endif /* PSL_IPL */
  81.  
  82. /*
  83.  * Machine dependent constants for Macintosh II series.
  84.    ALICE
  85.       BG 05/24/92,17:46:53
  86.          Well, I've tried to make this as macII-specific as possible.
  87.          It's difficult without knowing exactly what these things do.
  88.     06/03/92,14:12:35 BG 
  89.          I've done a little more messing around; I think we're basically
  90.      done for now except for tweeking.
  91.  */
  92. #define    MACHINE        "mac68k"
  93. #define    MACHINE_ARCH    "m68k"
  94. #define    MID_MACHINE    MID_M68K
  95.  
  96. /*
  97.  * Round p (pointer or byte index) up to a correctly-aligned value
  98.  * for all data types (int, long, ...).   The result is u_int and
  99.  * must be cast to any desired pointer type.
  100.  */
  101. #define ALIGNBYTES    (sizeof(int) - 1)
  102. #define    ALIGN(p)    (((u_int)(p) + ALIGNBYTES) &~ ALIGNBYTES)
  103.  
  104. #define    NBPG        4096        /* bytes/page */
  105. #define    PGOFSET        (NBPG-1)    /* byte offset into page */
  106. #define    PGSHIFT        12        /* LOG2(NBPG) */
  107. #define    NPTEPG        (NBPG/(sizeof (struct pte)))
  108.  
  109. #define NBSEG        (1024*NBPG)    /* bytes/segment */
  110. #define    SEGOFSET    (NBSEG-1)    /* byte offset into segment */
  111. #define    SEGSHIFT    22        /* LOG2(NBSEG) */
  112.  
  113. /* ALICE 05/24/92,19:31:42 BG -- Well, I wish we didn't have to worry */
  114. /*  about re-locating the kernel, but I think we will probably have to. */
  115. #define    KERNBASE    0x00000000    /* start of kernel virtual */
  116. #define    BTOPKERNBASE    ((u_long)KERNBASE >> PGSHIFT)
  117.  
  118. #define    DEV_BSIZE    512
  119. #define    DEV_BSHIFT    9        /* log2(DEV_BSIZE) */
  120. #define BLKDEV_IOSIZE    2048
  121. #define    MAXPHYS        (64 * 1024)    /* max raw I/O transfer size */
  122.  
  123. #define    CLSIZE        1
  124. #define    CLSIZELOG2    0
  125.  
  126. /* NOTE: SSIZE, SINCR and UPAGES must be multiples of CLSIZE */
  127. #define    SSIZE        1        /* initial stack size/NBPG */
  128. #define    SINCR        1        /* increment of stack/NBPG */
  129.  
  130. #define    UPAGES        3          /* pages of u-area */
  131.  
  132. /*
  133.  * Constants related to network buffer management.
  134.  * MCLBYTES must be no larger than CLBYTES (the software page size), and,
  135.  * on machines that exchange pages of input or output buffers with mbuf
  136.  * clusters (MAPPED_MBUFS), MCLBYTES must also be an integral multiple
  137.  * of the hardware page size.
  138.  */
  139. #define    MSIZE        128        /* size of an mbuf */
  140. #define    MCLBYTES    1024
  141. #define    MCLSHIFT    10
  142. #define    MCLOFSET    (MCLBYTES - 1)
  143. #ifndef NMBCLUSTERS
  144. #ifdef GATEWAY
  145. #define    NMBCLUSTERS    512        /* map size, max cluster allocation */
  146. #else
  147. #define    NMBCLUSTERS    256        /* map size, max cluster allocation */
  148. #endif
  149. #endif
  150.  
  151. /*
  152.  * Size of kernel malloc arena in CLBYTES-sized logical pages
  153.  */ 
  154. #ifndef NKMEMCLUSTERS
  155. #define    NKMEMCLUSTERS    (2048*1024/CLBYTES)
  156. #endif
  157.  
  158. /* pages ("clicks") (4096 bytes) to disk blocks */
  159. #define    ctod(x)    ((x)<<(PGSHIFT-DEV_BSHIFT))
  160. #define    dtoc(x)    ((x)>>(PGSHIFT-DEV_BSHIFT))
  161. #define    dtob(x)    ((x)<<DEV_BSHIFT)
  162.  
  163. /* pages to bytes */
  164. #define    ctob(x)    ((x)<<PGSHIFT)
  165.  
  166. /* bytes to pages */
  167. #define    btoc(x)    (((unsigned)(x)+(NBPG-1))>>PGSHIFT)
  168.  
  169. #define    btodb(bytes)             /* calculates (bytes / DEV_BSIZE) */ \
  170.     ((unsigned)(bytes) >> DEV_BSHIFT)
  171. #define    dbtob(db)            /* calculates (db * DEV_BSIZE) */ \
  172.     ((unsigned)(db) << DEV_BSHIFT)
  173.  
  174. /*
  175.  * Map a ``block device block'' to a file system block.
  176.  * This should be device dependent, and should use the bsize
  177.  * field from the disk label.
  178.  * For now though just use DEV_BSIZE.
  179.  */
  180. #define    bdbtofsb(bn)    ((bn) / (BLKDEV_IOSIZE/DEV_BSIZE))
  181.  
  182. /*
  183.  * Mach derived conversion macros
  184.  */
  185. #define macII_round_seg(x)    ((((unsigned)(x)) + NBSEG - 1) & ~(NBSEG-1))
  186. #define macII_trunc_seg(x)    ((unsigned)(x) & ~(NBSEG-1))
  187. #define macII_round_page(x)    ((((unsigned)(x)) + NBPG - 1) & ~(NBPG-1))
  188. #define macII_trunc_page(x)    ((unsigned)(x) & ~(NBPG-1))
  189. #define macII_btos(x)        ((unsigned)(x) >> SEGSHIFT)
  190. #define macII_stob(x)        ((unsigned)(x) << SEGSHIFT)
  191. #define macII_btop(x)        ((unsigned)(x) >> PGSHIFT)
  192. #define macII_ptob(x)        ((unsigned)(x) << PGSHIFT)
  193.  
  194. /*
  195.  * spl functions; all but spl0 are done in-line
  196.  */
  197.  
  198. #define _spl(s) \
  199. ({ \
  200.         register int _spl_r; \
  201. \
  202.         asm __volatile ("clrl %0; movew sr,%0; movew %1,sr" : \
  203.                 "&=d" (_spl_r) : "di" (s)); \
  204.         _spl_r; \
  205. })
  206.  
  207. /* spl0 requires checking for software interrupts */
  208. #if defined(BARF_BARF_BARF)
  209. #define spl1()  _spl(PSL_S|PSL_IPL1)
  210. #define spl2()  _spl(PSL_S|PSL_IPL2)
  211. #define spl3()  _spl(PSL_S|PSL_IPL3)
  212. #define spl4()  _spl(PSL_S|PSL_IPL4)
  213. #define spl5()  _spl(PSL_S|PSL_IPL5)
  214. #define spl6()  _spl(PSL_S|PSL_IPL6)
  215. #define spl7()  _spl(PSL_S|PSL_IPL7)
  216. #else /* not BARF_BARF_BARF */
  217. #define spl1()  _spl(PSL_S|PSL_IPL3)
  218. #define spl2()  _spl(PSL_S|PSL_IPL3)
  219. #define spl3()  _spl(PSL_S|PSL_IPL3)
  220. #define spl4()  _spl(PSL_S|PSL_IPL3)
  221. #define spl5()  _spl(PSL_S|PSL_IPL3)
  222. #define spl6()  _spl(PSL_S|PSL_IPL3)
  223. #define spl7()  _spl(PSL_S|PSL_IPL7)    /* spl7() always excludes everything */
  224. #endif /* BARF_BARF_BARF */
  225.  
  226. /* ALICE 06/03/92,14:08:28 BG I guess we could put in some spl's for various */
  227. /*  devices like VIA1 interrupt, and so on. */
  228. /* BARF -- These should be used for:
  229.    1) ensuring mutual exclusion (why use processor level?)
  230.    2) allowing faster devices to take priority
  231.  */
  232. #define splsoftclock()  spl1()    /* disallow softclock */
  233. #define splnet()        spl1()    /* disallow network */
  234. #define splbio()        spl5()    /* disallow block I/O */
  235. #define splimp()        spl5()    /* disallow imput */
  236. #define spltty()        spl5()    /* disallow tty interrupts */
  237. #define splclock()      spl6()    /* disallow clock interrupt */
  238. #define splvm()         spl6()    /* disallow virtual memory operations */
  239. #define splhigh()       spl7()    /* disallow everything */
  240. #define splsched()      spl7()    /* disallow scheduling */
  241.  
  242. /* watch out for side effects */
  243. #define splx(s)         ((s) & PSL_IPL ? _spl(s) : spl0())
  244.  
  245. #ifdef KERNEL
  246. #ifndef LOCORE
  247. int    cpuspeed;
  248. #define    DELAY(n)    { register int N = cpuspeed * (n); while (--N > 0); }
  249. #endif
  250.  
  251. #else
  252. #define    DELAY(n)    { register int N = (n); while (--N > 0); }
  253.  
  254. #endif
  255.